草庐IT

TypeScript 运算符

全部标签

c++ - 智能指针运算符=

我见过一些以两种方式实现operator=的智能指针:A)将原始指针分配给另一个原始指针的一个:SmartPointer&operator=(constSmartPointer&rhs){deletem_ptr;m_ptr=rhs.m_ptr;return*this;}B)还有一个在赋值后使右边的指针无效:SmartPointer&operator=(SmartPointer&rhs){deletem_ptr;m_ptr=rhs.m_ptr;rhs.m_ptr=nullptrreturn*this;}我的问题是更建议使用哪个?我对B)的问题是,如果有人想进一步操作第二个智能指针(见下面

c++ - 使用模板赋值运算符

有以下代码,为什么第一个赋值不调用Foo中的模板operator=,而第二个赋值呢?这里发生了什么?即使存在用户定义的模板,是否有编译器为第一次赋值生成模板?#includeusingnamespacestd;structUberFoo{};structFoo:publicUberFoo{templatevoidoperator=(constT&v){coutvoidoperator=(T&v){cout 最佳答案 编译器仍在生成第一个赋值绑定(bind)到的非模板operator=。在第二个作业中,模板化的operator=是一个

c++ - 比较 vector 的不等式仅在 vector 元素上使用相等运算符。为什么?

我的两个编译器(g++和clang)都不会编译这个:#includestructA{friendbooloperator!=(Aconst&a1,Aconst&a2){returnfalse;}};intmain(){std::vectorv1,v2;return(v1!=v2);}错误是STL_algobase.h中某处的!(*__first1==*__first2)无效。换句话说,它完全忽略了A的现有运算符!=。不用说,如果我定义一个operator==然后它编译并工作。按照标准应该是这样的吗?如果是,为什么? 最佳答案 是因为

c++ - CString 运算符 "+="和 "+"之间的不同行为

在将应用程序从VisualStudio2005迁移到VisualStudio2015时,我们发现在某些代码中存在不同的行为,当该代码是使用VS2015构建时连接CString实例。因此,我创建了一个简单的Win32控制台应用程序来演示该问题。控制台应用程序(使用MFC作为共享dll和Unicode字符集)执行这个简单的功能:voidf(){CStringx('\0');CStringr('a');r+=x;CStringrr('a');rr=rr+x;intrSize=r.GetLength();intrrSize=rr.GetLength();assert(rSize==rrSize

c++ - 自定义转换运算符的 Clang 歧义

我一直在开发一种适配器类,当我在clang下遇到问题。当定义了左值引用和右值引用的转换运算符时,您会在尝试从您的类中移出时遇到歧义编译错误(当这样的代码应该没问题时,如operatorconstT&()const&仅允许用于左值AFAIK)。我用简单的例子重现了错误:#includeclassStringDecorator{public:StringDecorator():m_string("Stringdatahere"){}operatorconststd::string&()const&//lvalueonly{returnm_string;}operatorstd::strin

c++ - C++ 编译器如何区分二元运算符和模板的标记 >>

我的疑问是C++编译器的解析器如Clang,编译器如何处理运算符>>知道它何时是二元运算符以及何时关闭模板,例如:std::vector>,我想这是在解析器时间完成的,所以解决这个问题的更好方法是在词法上或仅使用>作为标记,并在语法解析器中解决问题? 最佳答案 其实很简单:如果有一个开放的模板括号可见,一个>关闭它,即使>否则将构成>>的一部分运算符(operator)。(这不适用于属于其他标记的>字符,例如>=。)对C++语法的这种更改是C++11的一部分,并在§13.3[temp.]的第3段中进行了描述。名].如果>则打开的模板

c++ - 将运算符 << 与隐式转换的非基本数据类型一起使用时出错

这个问题在这里已经有了答案:Overloadresolutionfailurewhenstreamingobjectviaimplicitconversiontostring(5个答案)关闭4年前。我有一个结构可以作为其他类型的包装器,如下所示:templatestructA{A&operator=(constT&value){m_value=value;return*this;}operatorT()const{returnm_value;}private:Tm_value;};我是这样使用的:intmain(){Aa;a=5;//Copyassignmentconstructors

c++ - std::vector 和 std::list 的重载运算符

我想重载operator对于std::list和std::vector使用以下代码。但是两者的功能几乎是一样的。有什么方法可以将它们组合起来,即,创建一个更通用的重载?#include#include#include#includetemplatestd::ostream&operator&v){if(!v.empty())std::copy(v.begin(),v.end(),std::ostream_iterator(out,","));returnout;}templatestd::ostream&operator&v){if(!v.empty())std::copy(v.beg

c++ - MSVC10 Visual Studio 2010是否支持C++显式转换运算符

VisualStudio2010MSVC10是否支持显式转换运算符,或者是否仍需要实现安全的bool习惯用法?此代码无法编译:explicitoperatorbool()const{returnTraits::invalid()!=value;}编译错误:errorC2071:foo::operatorbool':非法存储类 最佳答案 不,VS2010对C++0x的支持非常有限。这是一个listoffeaturesthataresupportedbyVS2010. 关于c++-MSVC1

C++ 运算符 '<<' 错误

我有一个关于家庭作业的问题。我有两个类(class)。一个叫ticket.cpp,一个叫TicketOrder.cpp主要在ticket.cpp中。我在Linux上使用g++编译器。我正在做的是尝试打印出一个名为orders的TicketOrder对象的vector,但它给我以下错误:ticket.cpp:57:error:nomatchfor'operator::operator[]with_Tp=TicketOrder,_Alloc=std::allocator'这是我的代码:门票.cpp#include#include#include#include#include"Ticket